import pygame #导入pygame模块
from sys import exit #导入退出鼠标点击事件
from math import pi #导入math模块π
import time #导入时间模块

#1. 初始化pygame
pygame.init()

#2. 创建窗口大小
#第一个参数：设置窗口大小
#第二个参数：设置窗口样式（默认值是0），RESIZEABLE：窗口可以通过鼠标改变大小
#第三个参数：不建议设置
screen = pygame.display.set_mode((500, 300), pygame.RESIZABLE, 0)

#3. 设置窗口的填充背景颜色
screen.fill((255, 255, 255))

#4. 设置窗口标题
pygame.display.set_caption('hello, pygame')

#5. 获取屏幕的宽度
w = screen.get_width()
print(w)

#6. 获取屏幕的高度
h = screen.get_height()
print(h)

#7. 画直线
# aaline(surface, color, startpos, endpos, blend=1)
# startpos: 起始位置
# endpos: 结束位置
pygame.draw.aaline(screen, (10, 200, 120), (20, 20), (200, 200))

#8. 画矩形点
# aalines(surface, color, closed, pointlist, blend=1)
# closed: 是否关闭（是否连接起始点和终点）
# pointlist: 需要画线连接的点的列表
pygame.draw.aalines(screen, (100, 50, 20), True, [(10, 10), (60, 20), (30, 100), (100, 120)])

#9. 画矩形
pygame.draw.rect(screen, (28, 164, 252), (340, 360, 120, 200), 0)

#10. 画弧线
# arc(surface, color, Rect, start_angle, stop_angle, width=1)
#Rect: ((x,y), (width, height))
#start_angle: 其实角度，角度是pi对应的角度值
pygame.draw.arc(screen, (100, 100, 100), ((250, 150), (100, 100)), pi/2, pi)

#11. 画圆
# circle(surface, color, pos, radius, width):
# 参数1(surface):告诉pygame圆画在什么地方
# 参数2(color): 颜色
# 参数3(pos):位置(x, y), 注意不要超过屏幕的范围，指的是圆心的位置
# 参数4(radius): 半径
# 参数5(width): 宽度，值为0的就是填充
pygame.draw.circle(screen, (0, 255, 0), (50, 50), 40, 10)

#12. 使用系统字体
#a.在窗口上显示文字
# SysFont(name, size, bold=False, italic=False, constructor=None)
# name: 字体名
# size: 字体大小
# bold: 是否加粗
# italic: 是否斜体
font = pygame.font.SysFont('arial', 20, True, True)

#b. 将文字渲染到屏幕
# render(self, text, antialias, color, backgroud=None)
# text: 文字
# antialias: 是否平滑渲染
# color: 文字颜色
screen.blit(font.render('hell, world', True, (255, 0, 0)), (100, 100))

#13. 使用自定义文字
#font1 = pygame.font.Font('.')

#14. 渲染图片
#(1)加载图片
#image = pygame.image.load('E:/test.jpg').convert_alpha()

# (2)操作图片
# a. 获取图片大小
#print(image.get_size())

# b. 改变图片大小
# scale(Surface, (width, height), DestSurface=None)

# c. 将制定图片缩放制定大小
#new_image = pygame.transform.scale(image, (50, 50))

# d. 将制定的图片旋转并缩放
# rotozoom(Surface, angle, scale)
# Surface: 被操作的图片对象
# angle: 旋转角度(度数(0-360))
# scale: 缩放比例(缩小->小于1， 放大->大于1)
#new_image1 = pygame.transform.rotozoom(image, 90, 0.5)

# e. 渲染图片到屏幕
#screen.blit(new_image, (0, 0)) #括号里的是x, y坐标
#screen.blit(new_image1, (300, 100))

# 16将内容渲染到窗口上(让最近回执的屏幕可见)
pygame.display.flip()

runing = True
while runing:
    #不断检测事件，通过event可以获取到当前发生的事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            # runing = False 或者runing  = False结束循环，退出窗口
            # 系统退出
            exit()
            
        # 鼠标按下，pos是鼠标所在位置， pygame中的位置都是有x坐标和y坐标确定的
        if event.type == pygame.MOUSEBUTTONDOWN:
            print('鼠标按下')
            pos = event.pos
            print(pos)
        
        # 鼠标移动
        if event.type == pygame.MOUSEMOTION:
            print('鼠标移动')
            pos = event.pos
            print(pos)
         
        # 按键按下
        if event.type == pygame.KEYDOWN:
            print('按键按下')
            key = event.key
            print(chr(key))
        
        # 按键弹起
        if event.type == pygame.KEYUP:
            print('键盘的按键被弹起')
            key = event.key
            print(chr(key))
            
        if event.type == pygame.VIDEORESIZE:
            print('窗口大小改变:', event.size)

# Unicode = ASCII码 + 万国码
# 扩充: chr(): 将ASCII码转换成字符  ord():将字符转换成ASCII码

pygame.time.delay(50)